﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication1.WSAtendimentoCliente;
using WebApplication1.Classes;

namespace WebApplication1
{
    public partial class AtendimentoCliente : BaseRestrictedPage
    {
        WSRegistroControleEstoqueProdutos.Service1 EstoqueServices = new WSRegistroControleEstoqueProdutos.Service1();
        public WSAtendimentoCliente.AtendimentoCliente Service = new WSAtendimentoCliente.AtendimentoCliente();

        public bool IsAlteracao
        {
            get
            {
                return Convert.ToBoolean(ViewState["IsAlteracao"]);
            }
            set
            {
                ViewState["IsAlteracao"] = value;
            }
        }

        protected override void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);
            this.LoadChamados();
            this.CarregarPedidos();
        }

        private void CarregarPedidos()
        {
            List<Pedido> listaPedido = new List<Pedido>();
            using (DataBase db = new DataBase())
            {
                listaPedido = db.GetListaPedidoByCliente(Usuario.Objeto.CPF); //1

                ddlPedidos.DataSource = listaPedido;
                ddlPedidos.DataValueField = "idPedido";
                ddlPedidos.DataTextField = "idPedido";
                ddlPedidos.DataBind();
            }

            if (listaPedido.Count == 1)
            {
                this.CarregaComboProdutos(listaPedido[0].idPedido);
            }
        }

        private void LoadChamados()
        {
            WSAtendimentoCliente.ChamadoResumido[] v = Service.Consultar_Chamados_Por_Usuario("00000000-0000-0000-0000-000000000016", Usuario.Objeto.CPF, null, false);
            GridView1.DataSource = v;
            GridView1.DataBind();
        }

        protected void lnkNOvoChamado_Click(object sender, EventArgs e)
        {
            pnlNovo.Visible = true;
            btnNovo.Text = "Criar";
            txtDescricao.Text = "";
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            if (this.IsAlteracao)
            {
                NovaAlteracao v = new NovaAlteracao();
                v.Descricao = txtDescricao.Text;
                v.IdCliente = "00000000-0000-0000-0000-000000000016";
                v.IdChamado = hidChamado.Value;
                v.Status = 1;
                v.StatusSpecified = true;


                bool result;
                bool specified;
                Service.Alterar_Chamado(v, out result, out specified);
                btnNovo.Text = "Criar";
                this.IsAlteracao = false;   
            }
            else
            {
                WSAtendimentoCliente.NovoChamado chamado = new WSAtendimentoCliente.NovoChamado();

                chamado.Descricao = txtDescricao.Text;
                chamado.IdCliente = "00000000-0000-0000-0000-000000000016";
                chamado.IdPedido = ddlPedidos.SelectedValue;
                chamado.IdProduto = ddlProdutosPedido.SelectedValue;
                chamado.TipoChamado = Convert.ToByte(ddlTIpoChamado.SelectedValue);
                chamado.TipoChamadoSpecified = true;
                chamado.IdSolicitante = Usuario.Objeto.CPF;

                WSAtendimentoCliente.ChamadoAberto novo = Service.Abrir_Chamado(chamado);
            }

            this.LoadChamados();
        }

        protected void lnkAlterar_Click(object sender, EventArgs e)
        {
            LinkButton c = sender as LinkButton;
            pnlNovo.Visible = true;
            WSAtendimentoCliente.Chamado chamado = Service.Consultar_Chamado("00000000-0000-0000-0000-000000000016", c.CommandArgument);
            txtDescricao.Text = chamado.Descricao;

            ddlPedidos.SelectedValue = chamado.IdPedido;
            this.CarregaComboProdutos(Convert.ToInt32(chamado.IdPedido));
            ddlProdutosPedido.SelectedValue = chamado.IdProduto;

            ddlTIpoChamado.SelectedValue = chamado.TipoChamado.ToString();
            hidChamado.Value = c.CommandArgument;
            this.IsAlteracao = true;
            btnNovo.Text = "Salvar";
        }

        protected void ddlPedidos_SelectedIndexChanged(object sender, EventArgs e)
        {
            int idPedido = Convert.ToInt32(ddlPedidos.SelectedValue);

            this.CarregaComboProdutos(idPedido);
        }

        private void CarregaComboProdutos(int idPedido)
        {
            using (DataBase db = new DataBase())
            {
                List<PedidoItem> produtos = db.GetListaItemByPedido(idPedido);

                produtos.ForEach((a) =>
                                     {
                                         WSRegistroControleEstoqueProdutos.Product produto = EstoqueServices.ReturnProductInfo(a.idProduto);
                                         a.nome = produto.Name;
                                     });


                ddlProdutosPedido.DataSource = produtos;
                ddlProdutosPedido.DataTextField = "nome";
                ddlProdutosPedido.DataValueField = "idProduto";
                ddlProdutosPedido.DataBind();

            }
        }
    }
}